package com.umpay.feign.client;

import com.umpay.config.FeignLogConfiguration;
import com.umpay.dto.UMFResponse;
import com.umpay.dto.UMFResponse.Message;
import com.umpay.dto.consumeBusi.req.ConsumeOrderQueryBusiReq;
import com.umpay.dto.consumeBusi.res.consumeOrderQuery.ConsumeOrderQueryBusiRes;
import com.umpay.dto.merBusi.req.bindcard.AgreementConfirmBusiReq;
import com.umpay.dto.merBusi.req.bindcard.AgreementOrderBusiReq;
import com.umpay.dto.merBusi.req.consume.*;
import com.umpay.dto.merBusi.req.ebankpay.EbankPayNotifyBusiReq;
import com.umpay.dto.merBusi.req.ebankpay.EbankPayOrderBusiReq;
import com.umpay.dto.merBusi.req.payment.AgreementPayBusiReq;
import com.umpay.dto.merBusi.req.payment.AppPayOrderBusiReq;
import com.umpay.dto.merBusi.req.payment.MPOSBusiReq;
import com.umpay.dto.merBusi.req.payment.PaymentCodePayBusiReq;
import com.umpay.dto.merBusi.req.payment.WechatPublicPlatformReq;
import com.umpay.dto.merBusi.req.query.BalanceQueryBusiReq;
import com.umpay.dto.merBusi.req.quickpayment.QuickPaymentConfirmBusiReq;
import com.umpay.dto.merBusi.req.quickpayment.QuickPaymentOrderBusiReq;
import com.umpay.dto.merBusi.req.quickpayment.QuickPaymentVerifyCodeBusiReq;
import com.umpay.dto.merBusi.req.recharge.RechargeDirectBusiReq;
import com.umpay.dto.merBusi.req.recharge.RechargeDirectCfmBusiReq;
import com.umpay.dto.merBusi.req.recharge.RechargeSearchBusiReq;
import com.umpay.dto.merBusi.req.recharge.RechargeWyOrderReq;
import com.umpay.dto.merBusi.req.split.TransSplitBusiReq;
import com.umpay.dto.merBusi.req.split.TransSplitQueryBusiReq;
import com.umpay.dto.merBusi.res.bindcard.AgreementConfirmBusiRes;
import com.umpay.dto.merBusi.res.bindcard.AgreementOrderBusiRes;
import com.umpay.dto.merBusi.res.consume.*;
import com.umpay.dto.merBusi.res.ebankpay.EbankPayNotifyBusiRes;
import com.umpay.dto.merBusi.res.ebankpay.EbankPayOrderBusiRes;
import com.umpay.dto.merBusi.res.payment.AgreementPayBusiRes;
import com.umpay.dto.merBusi.res.payment.AppPayOrderBusiRes;
import com.umpay.dto.merBusi.res.payment.MPOSBusiRes;
import com.umpay.dto.merBusi.res.payment.PaymentCodePayBusiRes;
import com.umpay.dto.merBusi.res.payment.WechatPublicPlatformRes;
import com.umpay.dto.merBusi.res.query.BalanceQueryBusiRes;
import com.umpay.dto.merBusi.res.quickpayment.QuickPaymentConfirmBusiRes;
import com.umpay.dto.merBusi.res.quickpayment.QuickPaymentOrderBusiRes;
import com.umpay.dto.merBusi.res.quickpayment.QuickPaymentVerifyCodeBusiRes;
import com.umpay.dto.merBusi.res.recharge.RechargeDirectBusiRes;
import com.umpay.dto.merBusi.res.recharge.RechargeDirectCfmBusiRes;
import com.umpay.dto.merBusi.res.recharge.RechargeSearchBusiRes;
import com.umpay.dto.merBusi.res.recharge.RechargeWyOrderRes;
import com.umpay.dto.merBusi.res.split.TransSplitBusiRes;
import com.umpay.feign.hystrix.ConsumeBusiServerFeignClientHystrix;
import org.springframework.cloud.netflix.feign.FeignClient;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;

import java.util.Map;

/**
 * @author zhanglz
 * @ClassName: ConsumeBusiFeignClient
 * @Description:
 * @date 2018/9/11 14:35
 */
@FeignClient(name = "consumeBusi", configuration = FeignLogConfiguration.class, fallbackFactory = ConsumeBusiServerFeignClientHystrix.class)
public interface ConsumeBusiServerFeignClient {
    @RequestMapping(value = "/consumeBusi/recharge/wy", method = RequestMethod.POST)
    public UMFResponse.Message<RechargeWyOrderRes> rechargeWy(@RequestBody RechargeWyOrderReq rechargeWyOrderReq);

    @RequestMapping(value = "/consumeBusi/recharge/direct", method = RequestMethod.POST)
    public UMFResponse.Message<RechargeDirectBusiRes> rechargeDirect(@RequestBody RechargeDirectBusiReq rechargeDirectOrderReq);

    @RequestMapping(value = "/consumeBusi/recharge/direct/confirm", method = RequestMethod.POST)
    public UMFResponse.Message<RechargeDirectCfmBusiRes> rechargeDirectConfirm(@RequestBody RechargeDirectCfmBusiReq rechargeDirectCfmReq);

    @RequestMapping(value = "/consumeBusi/recharge", method = RequestMethod.GET)
    public UMFResponse.Message<RechargeSearchBusiRes> rechargeSearch(@RequestBody RechargeSearchBusiReq rechargeSearchBusiReq);



    /**
     * description : 余额消费
     **/
    @RequestMapping(value = "/consumeBusi/consume/merConsumeBalance", method = RequestMethod.POST)
    public UMFResponse.Message<ConsumeBalanceBusiRes> merConsumeBalance(@RequestBody ConsumeBalanceBusiReq consumeBalanceBusiReq);

    /**
     * description : 借记卡快捷消费下单
     **/
    @RequestMapping(value = "/consumeBusi/consume/merConsumeDebitcardReq", method = RequestMethod.POST)
    public UMFResponse.Message<ConsumeDebitcardBusiRes> merConsumeDebitcard(@RequestBody ConsumeDebitcardBusiReq consumeDebitcardBusiReq);

    /**
     * description : 借记卡快捷消费确认
     **/
    @RequestMapping(value = "/consumeBusi/consume/merConsumeDebitcardConfirm", method = RequestMethod.POST)
    public UMFResponse.Message<ConsumeDebitcardConfirmBusiRes> merConsumeDebitcardConfirm(@RequestBody ConsumeDebitcardConfirmBusiReq consumeDebitcardConfirmBusiReq);

    /**
     * description : 网银消费
     **/
    @RequestMapping(value = "/consumeBusi/consume/merConsumeNetBank", method = RequestMethod.POST)
    public UMFResponse.Message<ConsumeNetBankBusiRes> merConsumeNetBank(@RequestBody ConsumeNetBankBusiReq consumeNetBankBusiReq);

    /**
     * description : 网银消费确认
     **/
    @RequestMapping(value = "/consumeBusi/consume/merConsumeNetBankConfirm", method = RequestMethod.POST)
    public UMFResponse.Message<ConsumeNetBankConfirmBusiRes> merConsumeNetBankConfirm(@RequestBody ConsumeNetBankConfirmBusiReq consumeNetBankConfirmBusiReq);

    /**
     * description : 分账
     **/
    @RequestMapping(value = "/consumeBusi/split/transSplit", method = RequestMethod.POST)
    public UMFResponse.Message<TransSplitBusiRes> transSplit(@RequestBody TransSplitBusiReq transSplitBusiReq);

    @RequestMapping(value = "/consumeBusi/split", method = RequestMethod.GET)
    public UMFResponse.Message<TransSplitBusiRes> transSplitQuery(@RequestBody TransSplitQueryBusiReq transSplitQueryBusiReq);




    /**
     * @Title: balanceQuery
     * @Description: 余额查询
     * @param @param balanceQueryBusiReq
     * @param @return    参数
     * @return Message<BalanceQueryBusiRes>    返回类型
     * @throws
     */
    @RequestMapping(value = "/consumeBusi/balance", method = RequestMethod.POST)
    public UMFResponse.Message<BalanceQueryBusiRes> balanceQuery(@RequestBody BalanceQueryBusiReq balanceQueryBusiReq);

    /**
     * @Title: consumeQuery
     * @Description: 消费查询
     * @param @param requestMap
     * @param @return    参数
     * @return Message<BalanceQueryBusiRes>    返回类型
     * @throws
     */
    @RequestMapping(value = "/consumeBusi/consume/qryTrans", method = RequestMethod.GET)
    public UMFResponse.Message<ConsumeQueryBusiRes> consumeQuery(@RequestParam Map<String, Object> requestMap);

    /**
     * description : 扫码支付主扫
     **/
    @RequestMapping(value = "/consumeBusi/payment/wechatPublicPlatform", method = RequestMethod.POST)
    public UMFResponse.Message<ConsumeScancodeMainBusiRes> consumeScancodeMainBusiReq(@RequestBody ConsumeScancodeMainBusiReq consumeScancodeMainBusiRes);

    /**
     * @Title: refundQuery
     * @Description: TODO(这里用一句话描述这个方法的作用)
     * @param @param refundQueryReq
     * @param @return    参数
     * @return Message<RefundQueryRes>    返回类型
     * @throws
     */
    @RequestMapping(value = "/consumeBusi/h5pay/notify", method = RequestMethod.POST)
    public UMFResponse.Message<ConsumeH5NotifyBusiRes> h5PayNotify(ConsumeH5NotifyBusiReq consumeH5NotifyBusiReq);

    /* ********************************************
     * method name   : consumeGeneralOrder
     * description   :
     * @return       : Message<ConsumeGeneralOrderBusiRes>
     * @param        : @param consumeGeneralOrderBusiReq
     * @param        : @return
     * modified      : ncc ,  2018年3月16日 下午2:48:49
     * @see          :
     * ********************************************/
    @RequestMapping(value = "/consumeBusi/consume/generalOrder", method = RequestMethod.POST)
    public UMFResponse.Message<ConsumeGeneralOrderBusiRes> consumeGeneralOrder(
            ConsumeGeneralOrderBusiReq consumeGeneralOrderBusiReq);

    /**
     * @Title: consumeH5Pay
     * @Description: h5消费
     * @param @param consumeH5BusiReq
     * @param @return    参数
     * @return Message<ConsumeH5BusiRes>    返回类型
     * @throws
     */
    @RequestMapping(value = "/consumeBusi/consume/h5", method = RequestMethod.POST)
    public UMFResponse.Message<ConsumeH5BusiRes> consumeH5Pay(ConsumeH5BusiReq consumeH5BusiReq);

    /**
     * description : 外部交易入账文件上传通知
     * @author zhangru
     * @date 2018年4月20日 下午1:39:59
     * @version 1.0
     **/
    @RequestMapping(value = "/consumeBusi/consume/fileUploadNotify", method = RequestMethod.POST)
    public UMFResponse.Message<ConsumeFileUploadNotifyBusiRes> consumeFileUploadNotify(ConsumeFileUploadNotifyBusiReq consumeFileUploadNotifyBusiReq);

    /**
     * description : 标准快捷支付确认
     * @author xinpengliang
     * @date 2018年5月12日 下午1:39:59
     * @version 1.0
     **/
    @RequestMapping(value = "/consumeBusi/payment/confirm", method = RequestMethod.POST)
    public UMFResponse.Message<QuickPaymentConfirmBusiRes> quickPaymentConfirm(QuickPaymentConfirmBusiReq quickPaymentConfirmBusiReq);

    /**
     * @Title: quickPaymentOrder
     * @Description: 标准快捷支付下单
     * @param @param QuickPaymentOrderBusiReq
     * @param @return    参数
     * @return Message<QuickPaymentOrderBusiRes>    返回类型
     * @throws
     */
    @RequestMapping(value = "/consumeBusi/payment/quick/order", method = RequestMethod.POST)
    public UMFResponse.Message<QuickPaymentOrderBusiRes> quickPaymentOrder(QuickPaymentOrderBusiReq quickPaymentOrderBusiReq);

    /**
     * @Title: quickPaymentVerifyCode
     * @Description: 标准快捷支付获取验证码
     * @param @param QuickPaymentVerifyCodeBusiReq
     * @param @return    参数
     * @return Message<QuickPaymentVerifyCodeBusiRes>    返回类型
     * @throws
     */
    @RequestMapping(value = "/consumeBusi/payment/quick/verifyCode", method = RequestMethod.POST)
    public UMFResponse.Message<QuickPaymentVerifyCodeBusiRes> quickPaymentVerifyCode(QuickPaymentVerifyCodeBusiReq quickPaymentVerifyCodeBusiReq);

    /**
     * @Title: ebankPayApply
     * @Description: 网银支付申请
     * @param @param EbankPayBusiReq
     * @param @return    参数
     * @return Message<EbankPayBusiRes>    返回类型
     * @throws
     */
    @RequestMapping(value = "/consumeBusi/payment/ebank/order", method = RequestMethod.POST)
    public UMFResponse.Message<EbankPayOrderBusiRes> ebankPayOrder(EbankPayOrderBusiReq ebankPayBusiReq);

    /**
     * @Title: ebankPayNotify
     * @Description: 网银支付确认
     * @param @param EbankPayNotifyBusiReq
     * @param @return    参数
     * @return Message<EbankPayNotifyBusiRes>    返回类型
     * @throws
     */
    @RequestMapping(value = "/consumeBusi/payment/ebank/notify", method = RequestMethod.POST)
    public UMFResponse.Message<EbankPayNotifyBusiRes> ebankPayNotify(EbankPayNotifyBusiReq ebankPayNotifyBusiReq);

    /**
     *
     * @Title: finishOrder
     * @Description: 消费完成订单
     * @param @param consumeFinishOrderBusiReq
     * @param @return    参数
     * @return Message<ConsumeFinishOrderBusiRes>    返回类型
     * @throws
     */
    @RequestMapping(value = "/consumeBusi/consume/finishOrder", method = RequestMethod.POST)
    public UMFResponse.Message<ConsumeFinishOrderBusiRes> finishOrder(ConsumeFinishOrderBusiReq consumeFinishOrderBusiReq);
    /**
     * description : 公众号支付
     **/
    @RequestMapping(value = "/consumeBusi/payment/wechatPublicPlatform", method = RequestMethod.POST)
    public UMFResponse.Message<WechatPublicPlatformRes> wechatPlatformPay(@RequestBody WechatPublicPlatformReq wechatPublicPlatformReq);

    /**
     * description : 智能POS支付
     **/
    @RequestMapping(value = "/consumeBusi/payment/mpos/order", method = RequestMethod.POST)
    public UMFResponse.Message<MPOSBusiRes> mposPay(@RequestBody MPOSBusiReq mposBusiReq);



    /**
     * @Description: 扫码支付-用户被扫
     */
    @RequestMapping(value="/consumeBusi/payment/paymentCodePay",method = RequestMethod.POST)
    public UMFResponse.Message<PaymentCodePayBusiRes> paymentCodePay(PaymentCodePayBusiReq PaymentCodePayBusiReq);

    /**
     * @Description: 商业委托支付-签约下单
     */
    @RequestMapping(value="/consumeBusi/payment/entrustment/req",method = RequestMethod.POST)
    public UMFResponse.Message<AgreementOrderBusiRes> agreementOrder(AgreementOrderBusiReq AgreementOrderBusiReq);

    /**
     * @Description: 商业委托支付-下单确认
     */
    @RequestMapping(value="/consumeBusi/payment/entrustment/confirm",method = RequestMethod.POST)
    public UMFResponse.Message<AgreementConfirmBusiRes> agreementConfirm(AgreementConfirmBusiReq AgreementConfirmBusiReq);
    /**
     * @Description: 商业委托支付-协议支付
     */
    @RequestMapping(value="/consumeBusi/payment/entrusted",method = RequestMethod.POST)
    public UMFResponse.Message<AgreementPayBusiRes> agreementPay(AgreementPayBusiReq AgreementPayBusiReq);

    /**
	 * @Description: APP支付后台下单
	 * @author lile
	 * @date 2018年9月6日 下午5:37:07
	 */
	@RequestMapping(value = "/consumeBusi/payment/appPayOrder", method = RequestMethod.POST)
	public Message<AppPayOrderBusiRes> appPayBackEndOrder(AppPayOrderBusiReq appPayOrderBusiReq);

	/**
	 * description : 虚拟支付消费
	 * @author zhangru
	 * @date 2018年12月18日 下午2:24:57
	 * @version 1.0
	**/
	@RequestMapping(value = "/consumeBusi/payment/virtualPayment", method = RequestMethod.POST)
	public Message<ConsumeVirtualPaymentBusiRes> consumeVirtualPayment(ConsumeVirtualPaymentBusiReq virtualPaymentBusiReq);

    /**
     * 消费订单查询
     * @param consumeOrderQueryBusiReq
     * @return
     */
    @RequestMapping(value = "/consumeBusi/consume/consumeOrderQuery",method = RequestMethod.POST)
    public Message<ConsumeOrderQueryBusiRes> consumeOrderQuery(ConsumeOrderQueryBusiReq consumeOrderQueryBusiReq);
	
	
}
